/*

Miranda IM: the free IM client for Microsoft* Windows*

Copyright 2000-2007 Miranda ICQ/IM project, 
all portions of this codebase are copyrighted to the people 
listed in contributors.txt.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
aLONG with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*/

#pragma once

#include "m_popup.h"

namespace NReminder {

#define POPUP_TYPE_BIRTHDAY     1
#define POPUP_TYPE_ANNIVERSARY  2

// for PopupDelayType
#define POPUP_DELAY_DEFAULT     3
#define POPUP_DELAY_CUSTOM		4
#define POPUP_DELAY_PERMANENT   5

// for PopupColorType
#define POPUP_COLOR_DEFAULT     6
#define POPUP_COLOR_WINDOWS     7
#define POPUP_COLOR_CUSTOM      8

#define SOUND_BIRTHDAY_TODAY	"Birthday"
#define SOUND_BIRTHDAY_SOON		"BirthdayComing"
#define SOUND_ANNIVERSARY		"Anniversary"

// databbase settings
#define SET_REMIND_LASTCHECK				"RemindLastCheck"
#define SET_REMIND_ENABLED                  "RemindEnabled"
#define SET_REMIND_OFFSET					"RemindOffset"
#define SET_REMIND_CHECKVISIBLE				"RemindCheckVisible"
#define SET_REMIND_NOTIFYINTERVAL           "RemindNotifyInterval"
#define SET_REMIND_FLASHICON				"RemindFlashIcon"
#define SET_REMIND_EXTRAICON				"RemindExtraIcon"
#define SET_REMIND_BIRTHMODULE				"RemindBirthModule"
#define SET_REMIND_MENUENABLED              "RemindMenuEnabled"
#define SET_REMIND_BIRTHDAY_ENABLED         "RemindBirthday"
#define SET_REMIND_BIRTHDAY_OFFSET          "RemindBirthdayOffset"
#define SET_REMIND_CHECKON_STARTUP			"RemindStartupCheck"
#define SET_REMIND_SECUREBIRTHDAY			"RemindSecureBirthday"
#define SET_REMIND_BIRTHDAY_IGNORED			"RemindSecureIgnored"
#define SET_REMIND_SOUNDOFFSET				"RemindSoundOffset"
#define SET_POPUP_ENABLED					"PopupEnabled"
#define SET_POPUP_BIRTHDAY_COLORTYPE        "PopupBirthClrType"
#define SET_POPUP_BIRTHDAY_COLOR_TEXT       "PopupBirthClrBirthText"
#define SET_POPUP_BIRTHDAY_COLOR_BACK       "PopupBirthClrBirthBack"
#define SET_POPUP_ANNIVERSARY_COLORTYPE     "PopupAnnivClrType"
#define SET_POPUP_ANNIVERSARY_COLOR_TEXT    "PopupAnnivClrText"
#define SET_POPUP_ANNIVERSARY_COLOR_BACK    "PopupAnnivClrBack"
#define SET_POPUP_DELAY                     "PopupDelay"

// default values
#define DEFVAL_REMIND_ENABLED				NReminder::REMIND_ALL
#define DEFVAL_REMIND_MENUENABLED			1
#define DEFVAL_REMIND_OFFSET				9
#define DEFVAL_REMIND_SOUNDOFFSET			3
#define DEFVAL_REMIND_NOTIFYINTERVAL		12
#define DEFVAL_REMIND_BIRTHMODULE			0
#define DEFVAL_POPUP_ENABLED				1
#define DEFVAL_REMIND_CHECKVISIBLE			0
#define HM_OPENMSG	(WM_USER+1)

/**
 * unicode / ansi wrappers
 **/
#ifdef _UNICODE
 #define POPUPDATAT				POPUPDATAW
 #define MS_POPUP_ADDPOPUPT		MS_POPUP_ADDPOPUPW
 #define PUAddPopUpT			PUAddPopUpW
#else
 #define POPUPDATAT				POPUPDATAEX
 #define MS_POPUP_ADDPOPUPT		MS_POPUP_ADDPOPUPEX
 #define PUAddPopUpT			PUAddPopUpEx
#endif

/**
 * typedefs:
 **/
enum EEnabled {
	REMIND_OFF,
	REMIND_BIRTH,
	REMIND_ANNIV,
	REMIND_ALL,
};

enum ENotify {
	NOTIFY_CLIST,		// notify with clist extra icon only
	NOTIFY_POPUP,		// notify with popup and clist extra icon
	NOTIFY_NOANNIV		// notify of no anniversary was found
};

enum EventType {
	EVENT_NONE,
	EVENT_BIRTHDAY,
	EVENT_ANNIVERSARY
};

struct RemindEvent {
	EventType	_bType;
	WORD		_wDaysLeft;
};

/**
 * Global functions:
 **/
VOID	CheckAll(const ENotify notify);
LPCSTR	GetMyBirthdayModule();

INT		OnCListApplyIcons(WPARAM wParam, LPARAM lParam);
VOID	OnTopToolBarModuleLoaded();

VOID	Enable(BOOLEAN bEnable);
VOID	LoadModule(VOID);
VOID	UnloadModule(VOID);

} // namespace NReminder